package apibasej.db.sql.wrapper;


// T é o tipo da colSelect, mas não tem muita utilidade para este caso (wrapper order by)
public class OrderBy<T> extends SqlPart<T> {

	// esta colSelect pode ou não estar adicionada no UtilDB como colSelect 
	// se não for adicionada como uma coluna de resposta não deve ter o alias setado
	private ColSelect<T> colSelect; 
	
	private Boolean isDesc = null;// default é crescente (ascendente), se tiver null não coloca a str 'asc' nem 'desc'
	
	private String strOrderBy = null;
	
	public OrderBy(ColSelect<T> colSelect) {
		super(colSelect.getWrapperTab(), colSelect.getCol());
		this.colSelect = colSelect;
	}

	
	
	public String getStrOrderBy() {
		if(strOrderBy==null){
			StringBuilder s = new StringBuilder();
			if(getColSelect().getAliasSelect()!=null){// se não for adicionada como uma coluna de resposta não deve ter o alias setado
				s.append(getColSelect().getAliasSelect());
			}else{
				if(getWrapperTab()!=null && getWrapperTab().getAliasTab()!=null) {
					s.append(getWrapperTab().getAliasTab());
					s.append('.');
				}
				s.append(getCol().getName());
			}
			if(isDesc()!=null){
				if(isDesc()) s.append(" DESC");
				else s.append(" ASC");
			}
			return s.toString();

		}
		return strOrderBy;
	}

	public void setStrOrderBy(String strOrderBy) {
		this.strOrderBy = strOrderBy;
	}



	public ColSelect<T> getColSelect() {
		return colSelect;
	}
	public void setColSelect(ColSelect<T> colSelect) {
		this.colSelect = colSelect;
	}

	public Boolean isDesc() {
		return isDesc;
	}
	public void setIsDesc(Boolean isDesc) {
		this.isDesc = isDesc;
	}
	
	

}
